Javascript 计算请假天数 您所在的位置:网站首页 js 时间差计算 Javascript 计算请假天数

Javascript 计算请假天数

2024-05-28 11:59| 来源: 网络整理| 查看: 265

计算请假天数,笼统来说就是计算两个日期的差值。对于JS来说,两个时间直接相减,得到的是这两个时间差的毫秒数。

先上代码后贴图。

1.测试数据

后文中用到的测试数据如下:

var dateStart = '2018-12-01 04:15', dateEnd = '2018-12-08 12:15'; var MS_HOUR = 1000*60*60;

 

2.时间差毫秒数

普通计算两个时间差的方法如下:

function getDiff(start, end) { var s = Date.parse(start), e = Date.parse(end); //取绝对值 return Math.abs(e - s); } console.log(getDiff(dateStart, dateEnd)); 输出: 633600000 3.时间差小时数

计算两个时间差的小时数:

 

function getDiffByHour(start, end) { /**** * start:请假开始时间 * end:请假结束时间 * 计算小时数(1位小数) * ***/ var s = Date.parse(start), e = Date.parse(end); //取绝对值 var diff = Math.abs(e - s); return (diff / (1000 * 60 * 60)).toFixed(1); } console.log(getDiffByHour(dateStart, dateEnd)); 输出: 176.0

 

4.简单请假规则

不同单位对请假的限制条件不同,现规定请假天数计算规则如下:

1、请假半天记0.5天;

2、小于半天部分,1小时计0.1天,2小时计0.2天,以此类推

那么计算逻辑也还比较简单:

 

function getDiffByDay(start, end) { /**** * start:请假开始时间 * end:请假结束时间 * 计算天数,半天按0.5天计算,小于半天,1小时计0.1天,2小时计0.2天,3小时计0.3天,4小时计0.4天(1位小数) * ***/ var s = Date.parse(start), e = Date.parse(end); //取绝对值 var diff = Math.abs(e - s); var result = 0, hour = Math.floor(diff / (1000 * 60 * 60)), day = Math.floor(diff / (1000 * 60 * 60 * 24)); result = day; if (day > 0) { //去掉天数部分,仅留小时数 hour -= day * 24; } if (hour > 5) { //如果大于半天(5小时) result += 0.5; hour = Math.floor((diff - (day * 24 + 5) * 1000 * 60 * 60) / (1000 * 60 * 60)); } if (hour > 1) { result += hour * 0.1; } return result; } console.log(getDiffByDay(dateStart, dateEnd)); 输出: 7.8

复制代码

 

5.复杂请假规则

倘若规定上下班时间,中午休息时间,工作时长等等,那计算的逻辑就相当复杂了。

现规定上下班及午休时间如下:

上班时间:8:00

下班时间:18:00

午休时间:12:00-14:00

(正常日工作时长:8小时)

那么,请假1小时则为1/8天,4小时即为0.5天。

简单分析:

1.请假时段在同一天内,直接计算;

2.请假时段跨越了多天的情况,我们可以把请假时间分成两个部分,请假时间 start 至 end,可以看成第一部分: start的时间起到第二天 end时间止的请假时长,第二部分:start日期与end日期之间的天数(不含start和end)。

例如:请假时段 ‘2018-01-01 8:00’ 至 '2018-01-03 12:00',那么请假时长可以分为 '2018-01-01 8:00'至'2018-01-02 12:00'的时长(过滤闲暇时间和午休时间),和'2018-01-01'至'2018-01-03'间的天数,即为 1.5+1=2.5天。

5.1 请假时间在同一个日期

这种情况下,直接是end-start然后除去午休时间,最后得到的小时数来计算天数。

复制代码

function getLeaveDayInOneDay(start, end, wt) { /** * 获取一天内的请假天数 * @start:起始时间 * @end:截止时间 * @wt:作息时间,包含上下班时间和午休时间 * */ var diff = { }; diff.d = 0; /** * diff: * { * d:天数 * h:小时数 * st:起始时间毫秒数 * et:截止时间毫秒数 * } * */ try { var startInt = Date.parse(start), endInt = Date.parse(end); if (startInt


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有